python循环抓取网页 用python抓取网页数据 您所在的位置:网站首页 python3 循环 python循环抓取网页 用python抓取网页数据

python循环抓取网页 用python抓取网页数据

2023-06-17 11:58| 来源: 网络整理| 查看: 265

python 实时抓取网页数据并进行 筛查

爬取数据的两种方法 : 方法 1 : 使用 requests.get() 方法,然后再解码,接着 调用 BeautifulSoup API

首先看 headers 获取方法 :

点击进入任意一个网页页面,按F12进入开发者模式,点击Network再刷新网页。在Network下的Name中任意点击一个资源,在右侧的Headers版块中下拉到最后,可以看见Request Headers参数列表最后有一个user-agent,其内容就是我们要找的浏览器headers参数值。

python循环抓取网页 用python抓取网页数据_python循环抓取网页

然后通过查找 html 源码来 find 指定内容 。利用 find_all() 方法 和 tag.find() 方法

python循环抓取网页 用python抓取网页数据_前端_02

方法2 : 调用 Request() 方法,并进行 urlopen() , decode 操作,最后用 BeautifulSoup() 方法,这样对 html 解析完毕, 接着用 .select() 方法查找 html 代码中的指定内容 。

python循环抓取网页 用python抓取网页数据_python_03

其实两种方法对于 html 的解析都是固定操作,关键在于 查找 html 的指定内容该如何查找。

首先使用F12对当前页面进行解析,如图所示 :

python循环抓取网页 用python抓取网页数据_html_04

接着点击左上角的元素检查按钮,即 :

python循环抓取网页 用python抓取网页数据_python循环抓取网页_05

然后再点击想要 爬取的网页内容, 就可以找到 其所在 html 源码中的位置 :

比如我这里的位置是在 pre 里面

python循环抓取网页 用python抓取网页数据_前端_06

紧接着右击 pre 栏,选择复制 selector , 就可以看见所找内容对应的 html 地址 : 我这里的为

#main-panel > pre:nth-child(11)

这里的关键信息就是 > 之后的内容 和 : 之前的内容 。如果有 多个 > 的话,就把多个 > 的信息列出来即可,比如 :

#group-topics > div:nth-child(2) > table > tbody > tr:nth-child(5) > td.title > a

那么就需要提取 tr td.title a 作为关键信息即可。

找出关键信息后,在方法 2 中的 .select() 中填入关键信息即可,注意关键信息用 ’ ’ 包起来 。

下面请看源码 :

from bs4 import BeautifulSoup import requests from datetime import datetime import time ##import schedule ## 获取 headers headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.5112.81 Safari/537.36 Edg/104.0.1293.47'} ## 方法 1 爬取 html 网页内容 ip0_url = "http://xxxxxxxxx.cn" ip1_url = "http://xxxxxxxxx.cn" ip2_url = "http://xxxxxxxxx.cn" r_ip0 = requests.get(ip0_url,headers = headers) r_ip1 = requests.get(ip1_url,headers = headers) r_ip2 = requests.get(ip2_url,headers = headers) html_ip0 = r_ip0.content.decode('utf-8','ignore') html_ip1 = r_ip1.content.decode('utf-8','ignore') html_ip2 = r_ip2.content.decode('utf-8','ignore') ip0_page = BeautifulSoup(html_ip0,'lxml') ip1_page = BeautifulSoup(html_ip1,'lxml') ip2_page = BeautifulSoup(html_ip2,'lxml') def job_1(sa_page,time_now): now_file = "./err_log/pre.txt" file2 = open(now_file,'w').close() for tag in sa_page.find_all('html'): sub_tag = tag.find('body') with open(now_file,'a') as ff: ff.write(sub_tag.text) ff.close() def job_2(ip_name,log_file): ip = ip_name.split("_lo")[0] line_list = [] sa_pre_path = "./err_log/pre.txt" sa_path = "./err_log/{}.txt".format(log_file) file1 = open(sa_pre_path,'rb') for line in file1.readlines(): data = line.decode() strlist = data.split("/\n")[0] if "STATUS" in strlist: status = strlist.split("STATUS:")[1].split(" ")[0] if(status == "FAIL"): line_list.append(strlist) # 对 ip0 进行一些特殊处理 if (ip_name == "ip0_log"): with open(sa_path,'w') as fw: fw.write("\n====================={}====================\n\n".format(ip_name)) for ll in line_list: fw.write(ll) # 从另外一个 html 网址获取内容 ll_0 = ll.split("STATUS")[0] ll_1 = re.sub(r" ","",ll_0) ll_r = re.sub(r'/','_',ll_1) ## re.sub() replace function # 获取到指定 url log_url = "http://xxxx.cn/xxx/XXXXXX_IP/view/03/view/xxx/xxx/xxx_{0}_regre/lastCompletedBuild/testReport/(root)/{1}/{2}/".format(ip,ll_r,ll_r) ### 方法 2 ,使用 Request API 来爬取页面 (个人感觉比 方法 1 好用) r_log = Request(log_url,headers = headers) res = urlopen(r_log) aa = res.read().decode('utf-8') log_page = BeautifulSoup(aa,'html.parser') ## 搜索 关键路径 comment = log_page.select('pre') ###### 如果 搜索的 html 网站 没有结果,则 跳过 if(len(comment) < 2): continue else: cc = str(comment[1]) key_value = cc.split('Waive List:')[1].split('Error Pattern found')[0] if (len(key_value) < 100): fw.write("{}\n\n".format(key_value)) else: fw.write("ERR MSG : \n") if ("Offending" in key_value): fw.write("Offending {}\n".format(key_value.split("Offending")[1].split("Offending")[0])) # line 1 elif ("UVM" in key_value): fw.write("UVM{}\n\n".format(key_value.split("UVM")[1].split("UVM")[0])) # line 1 ### 在文件中追加写入其他 ip 的内容 else: with open(sa_path,'a') as fw: fw.write("\n====================={}====================\n\n".format(ip_name)) for ll in line_list: fw.write(ll) ll_0 = ll.split("STATUS")[0] ll_1 = re.sub(r" ","",ll_0) ll_r = re.sub(r'/','_',ll_1) ## re.sub() replace function log_url = "http://xxxx.cn/xxx/XXXXXX_IP/view/03/view/xxx/xxx/xxx_{0}_regre/lastCompletedBuild/testReport/(root)/{1}/{2}/".format(ip,ll_r,ll_r) r_log = Request(log_url,headers = headers) res = urlopen(r_log) aa = res.read().decode('utf-8') log_page = BeautifulSoup(aa,'html.parser') comment = log_page.select('pre') ###### pass search html data == 0 case : if(len(comment) < 2): continue else: cc = str(comment[1]) key_value = cc.split('Waive List:')[1].split('Error Pattern found')[0] if (len(key_value) < 100): fw.write("{}\n\n".format(key_value)) else: fw.write("ERR MSG : \n") if ("Offending" in key_value): fw.write("Offending {}\n".format(key_value.split("Offending")[1].split("Offending")[0])) # line 1 elif ("UVM" in key_value): fw.write("UVM{}\n\n".format(key_value.split("UVM")[1].split("UVM")[0])) # line 1 ###### 定时的提取 html 网页中的内容 并写入 txt 中去 while True: time_hm = time.strftime("%H:%M", time.localtime()) # 刷新 time_now = datetime.now().strftime("%Y-%m-%d.%H:%M:%S.%f") if time_hm == "05:01": # 设置要执行的时间 job_1(ip0_page,"ip0_log",time_now) job_2("ip0_log",time_now) job_1(ip1_page,"ip1_log",time_now) job_2("ip1_log",time_now) job_1(ip2_page,"ip2_log",time_now) job_2("ip2_log",time_now) time.sleep(120) # 停止执行120秒,防止反复运行程序。 elif time_hm == "09:01": job_1(ip0_page,"ip0_log",time_now) job_2("ip0_log",time_now) job_1(ip1_page,"ip1_log",time_now) job_2("ip1_log",time_now) job_1(ip2_page,"ip2_log",time_now) job_2("ip2_log",time_now) time.sleep(120) elif time_hm == "13:01": job_1(ip0_page,"ip0_log",time_now) job_2("ip0_log",time_now) job_1(ip1_page,"ip1_log",time_now) job_2("ip1_log",time_now) job_1(ip2_page,"ip2_log",time_now) job_2("ip2_log",time_now) time.sleep(120) elif time_hm == "17:04": job_1(ip0_page,"ip0_log",time_now) job_2("ip0_log",time_now) job_1(ip1_page,"ip1_log",time_now) job_2("ip1_log",time_now) job_1(ip2_page,"ip2_log",time_now) job_2("ip2_log",time_now) time.sleep(120) elif time_hm == "21:01": job_1(ip0_page,"ip0_log",time_now) job_2("ip0_log",time_now) job_1(ip1_page,"ip1_log",time_now) job_2("ip1_log",time_now) job_1(ip2_page,"ip2_log",time_now) job_2("ip2_log",time_now) time.sleep(120) elif time_hm == "01:01": job_1(ip0_page,"ip0_log",time_now) job_2("ip0_log",time_now) job_1(ip1_page,"ip1_log",time_now) job_2("ip1_log",time_now) job_1(ip2_page,"ip2_log",time_now) job_2("ip2_log",time_now) time.sleep(120) elif time_hm == "11:38": job_1(ip0_page,"ip0_log",time_now) job_2("ip0_log",time_now) job_1(ip1_page,"ip1_log",time_now) job_2("ip1_log",time_now) job_1(ip2_page,"ip2_log",time_now) job_2("ip2_log",time_now) time.sleep(120)



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

      专题文章
        CopyRight 2018-2019 实验室设备网 版权所有